import json

from model.data_Object import Record


class FileReader():
    """
    读取文件的接口
    """

    def read_file(self, file_path: str) -> list[Record]:
        pass


class FileReader_csv(FileReader):
    """
    读取csv文件的子类
    """

    def __init__(self, file_path: str):
        self.file_path = file_path

    def read_file(self):
        """
        处理csv文件中的数据，首先strip先清除\n，然后split按照","分隔语句。这个时候数据已经封装完成，接下来就要把封装好的数据变成Record类的对象
        然后存储到列表中
        目标的csv文件是一个字符串，当存储到列表时，可以按照下标索引进行取样
        :return:list[Record]
        """
        f = open(self.file_path, "r", encoding="utf-8")
        data_scv = f.readlines()
        scv_list = []
        for line in data_scv:
            line = line.strip()  #去除空格和转义字符
            line = line.split(",")
            record_line = Record(line[0], line[1], int(line[2]), line[3])
            scv_list.append(record_line)
        f.close()
        return scv_list
        # for record in scv_list:
        #     print(record)


class FileReader_Json(FileReader):
    def __init__(self, file_path: str):
        self.file_path = file_path


    def read_file(self):
        """
        处理json格式文件，json格式本身封装好了，只需要转换成字典格式就行，然后变成Record类的对象
        存到列表中
        目标文件是一个json文件，所以当转换成字典的时候，就可以根据键去获取值
        :return:list[Record]
        """
        f = open(self.file_path, "r", encoding="utf-8")
        data_list = []
        data_json = f.readlines()
        for line in data_json:
            data_dict = json.loads(line)
            record = Record(data_dict["date"], data_dict["order_id"], data_dict["money"], data_dict["province"])
            data_list.append(record)
        f.close()
        return data_list
        # for record in data_list:
        #     print(record.__dict__)


if __name__ == "__main__":
    csv_1 = FileReader_csv("F:/Python/res/2011年1月销售数据.txt")
    json_1 = FileReader_Json("F:/Python/res/2011年2月销售数据JSON.txt")
    csv_1.read_file()
    json_1.read_file()
